執行結果大概可以看出他要我們利用他的加密方式去解出下面他給的一串16進位數字
利用ghidra可以很明顯的看出目標應該是encrypt這個函式
這裡可以看到他的加密過程
將輸入進去的值先做rol 4個bits
rol4 的意思就是左移4個bits,溢出的會從最一開始補上
例如:rol 10000100 -> 00001001
ror 的意思相反
例如:ror 10000100 -> 01000010
做完rol後再跟0x16做xor,再做ror 8個bits就完成加密
題目已經有提供加密後的flag了,我們只需要反過來運算就可以得到加密前的flag
不過這題要注意他的資料型態,有時候是int有時候是byte,要是沒有掌控好是拿不到Flag的
這邊利用python來解 以下是程式碼在byte的部份我是利用numpy中的uint8來表示
import numpy as np
flag=[0x11,0x80 ,0x20 ,0xE0 ,0x22 ,0x53 ,0x72 ,0xA1 ,0x01 ,0x41 ,0x55,0x20,0xA0,0xC0 ,0x25 ,0xE3 ,0x35 ,0x40 ,0x55 ,0x30 ,0x85 ,0x55 ,0x70 ,0x20 ,0xC1]
for i in range(len(flag)):
x=flag[i]
x^=0x16
y=(np.uint8(x<<4))|(np.uint8(x>>4)) #ror4
print(chr(np.uint8(y)),end='')
這樣就可以得到Flag囉
一開始執行程式後有想到一個暴力法,也不會花太多時間因為Flag也就那幾個字而已
這當然也是一種解題方式,假如丟到ghidra後還是解不出來最壞的辦法就只能這樣了XD